Computer software comprises a set of instructions to be executed by a data processing system. Generally, it is the computer software which makes a data processing system useful, by providing the instructions for the data processing system to carry out productive tasks. Computer software provides instructions that enable a data processing system to function as, for example, a word processing device, spreadsheet device, or an Internet browsing device.
There are a wide variety of different data processing systems capable of using computer software. Accordingly, as used herein, the term “data processing system” is intended to have a broad meaning, and may include personal computers, laptop computers, palmtop computers, handheld computers, network computers, servers, mainframes, workstations, cellular telephones and similar wireless devices, personal digital assistants and other electronic devices on which computer software may be installed. The terms “computer”, “computer software”, “computer program”, “computer programming”, “software”, “software program” and related terms are intended to have a similarly broad meaning.
Generally, modern computer software is originally written in a “high level” computer programming language using syntactic constructs that are comprehensible by a programmer to represent the instructions embodied in the software. For example, in the “C” programming language, the syntactic term “printf” is used to represent an instruction to the data processing system to print the contents of a particular data field. High level computer programming languages are useful because their syntactic constructs make it easier for programmers to create computer software, since they do not need to compose instructions in a language that would be directly understood by the data processing system. Writing instructions in such a language would be far more difficult because such languages bear little or no resemblance to any human language.
Instructions written in a high level computer programming language, however, generally cannot be directly understood and implemented by a data processing system. Therefore, before a computer program written in a high level computer programming language may be used by a data processing system, it must first be “compiled” into language that will be understood by the target data processing system. Compiling is a process, usually carried out by a computer program called a “compiler”, in which the syntactic constructs of the high level computer programming language are in essence translated into instructions in a language that will be understood by the target data processing system (possibly through an intermediate software layer). The result of the “compiling” or “compilation” process is known as “executable code”, meaning computer program code that can be executed by the data processing system either directly or by an intermediate software layer.
Usually, a direct translation of a computer program written in a high level computer programming language into executable code will not result in particularly efficient executable code. There may be, for example, redundant operations, inefficient allocations of memory within the data processing system, and other circumstances which would impair the efficiency of the executable code. In addition, the order of instructions specified by the human programmer may not be the most efficient, or even nearly the most efficient, way to carry out the instructions on the data processing system. To obviate these difficulties, various performance improvement algorithms are applied when compiling computer programs written in a high level computer programming language.
One example of such a performance improvement algorithm is vectorization. The term “vectorization” refers to a process in which operations that would have been performed iteratively on one target data element at a time (referred to as “scalar processing”) are instead performed on a vector made up of a set of target data elements, thereby enabling the data elements to be operated on at rates exceeding the result rates of simple scalar processing. Thus, one type of performance improvement algorithm that can be applied by a compiler is to transform scalar operations into vector operations.